package com.shangma.cn;


import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.DecodedJWT;
import com.auth0.jwt.interfaces.JWTVerifier;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.CronTrigger;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

/**
 * 开发者：辉哥
 * 特点： 辉哥很帅
 * 开发时间：2021/6/30 15:16
 * 文件说明：
 */
public class TimeDemo {

    /*
     * jdk自带1 Timer和 TimerTask  没有线程池
     *
     * jdk自带 线程池
     *              唯一的接口 Executor
     *                          两大实现：
     *                                  1： 线程池   没有延时的 ThreadPoolExecutor
     *                                  2： 有线程池 并且可以延迟的 ScheduledThreadPoolExecutor
     *
     *
     * Spring基于 jdk自带的Executor 在这个Executor基础上实现了2个功能
     *                                  1： 线程池  => spring的异步任务  ThreadPoolTaskExecutor
     *                                  2： 带调度的  =》SpringTask     ThreadPoolTaskScheduler
     *
     *         和timer功能类似 可以做延迟 和 间隔  并且有线程池
     *
     *
     * 第三方：
     *    quartz
     *    springTask:
     *            不需要导包   - spring-context
     *
     * */


    public static void main(String[] args) throws Exception {

        Algorithm algorithm = Algorithm.HMAC256("secret");
        String token = JWT.create()
                .withIssuer("auth0")  //设置签发者
                .withSubject("nihao bucuo ") //设置主题
                .withClaim("key", "辉哥真帅")
                .sign(algorithm);


        Algorithm algorithm1 = Algorithm.HMAC256("secret");
        JWTVerifier verifier = JWT.require(algorithm1)
                .withIssuer("auth0")
                .build(); //Reusable verifier instance
        //jwt
        DecodedJWT jwt = verifier.verify(token);

        System.out.println(jwt.getClaim("key").asString());
        System.out.println(jwt.getSubject());
        System.out.println(jwt);

    }


}
